package br.com.tcc.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;
import javax.persistence.Query;

import org.apache.log4j.Logger;

import br.com.tcc.model.ListaCompras;

public class ListaComprasDAO {
	private EntityManagerFactory emf;
	Logger logger = Logger.getLogger(ListaComprasDAO.class);
	
	public ListaComprasDAO() {
		emf = Persistence.createEntityManagerFactory("persistencia");
	}
	
	/**
	 * Adicionar uma lista de compras...
	 * @param listaCompras
	 * @return
	 */
	public boolean adicionar(ListaCompras listaCompras) {
		EntityManager em = emf.createEntityManager();
		boolean retorno = true;
		try{
			em.getTransaction().begin();
			em.merge(listaCompras);
			em.getTransaction().commit();
		}catch(Exception e){
			em.getTransaction().rollback();
			 logger.warn("Erro no metodo  [ " + e.getMessage() + " ]");
			retorno = false;
			em.close();
		}finally{
			em.close();
		}
	   	return retorno;
	}
	
	/**
	 * Buscar listas de compras do usuario
	 * @param idUsuario
	 * @return  List<ListaCompras>
	 */
	public List<ListaCompras> buscarListasSalvas(int idUsuario) {
		EntityManager em = emf.createEntityManager();
		List<ListaCompras> listaCompras = null;
		try {
			em.getTransaction().begin();
			Query q = em.createQuery("select l from ListaCompras l where l.usuario.idUsuario = :idUsuario order by nomeLista");
			q.setParameter("idUsuario", idUsuario);
			listaCompras = q.getResultList();
		} catch (NoResultException e) {
			logger.info("sem resultados para o id do usuario = " +idUsuario);
		}catch (Exception e) {
			 logger.warn("Erro no metodo  [ " + e.getMessage() + " ]");
		}finally{
			em.close();
		}
		
		return listaCompras;
	}
	
	/**
	 * Excluir uma lista de compras para um usuario
	 * @param idListaCompras
	 * @return boolean
	 */
	public boolean excluirListaSalva(int idListaCompras) {
		EntityManager em = emf.createEntityManager();
		boolean retorno = true;
		
		try{
		   	em.getTransaction().begin();
		   	Query q = em.createQuery("delete from ListaCompras l where l.idListaCompras = :idListaCompras");
		   	q.setParameter("idListaCompras", idListaCompras);
		   	q.executeUpdate();
		 	em.getTransaction().commit();
		 	retorno = true;
		}catch (NoResultException e) {
			logger.info("sem registro");
			retorno = false;
		}catch (Exception e) {
			 logger.warn("Erro no metodo  [ " + e.getMessage() + " ]");
			retorno = false;
		}finally{
			em.close();
		}
		return retorno;
	}
}